#pragma once
#include <iostream>
#include <signal.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

//守护进程
//将服务器端置为后台进程
//将服务器端脱离当前会话，成为一个独立会话，不会被当前会话影响
//为了不让已经部署的服务器端终止，将SIGPIPE忽略，当读端关闭，继续向写端写入时，会向写端发送SIGPIPE信号，写端进程终止
//服务为后台进程，将日志输出重定向
void daemon()
{
    signal(SIGPIPE,SIG_IGN);
    //运行这个程序，那么这个进程一定是一个进程组的组长，组长是不能脱离会话
    //创建子进程，将父进程退出，将子进程脱离会话
    if(fork()>0)
    {
        exit(1);
    }
    //子进程脱离会话
    setsid();
    //重定向
    int fd=open("/dev/null",O_RDWR);
    if(fd!=-1)
    {
        dup2(fd,1);
        dup2(fd,2);
        dup2(fd,3);
        close(fd);
    }

}